home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
dviware
/
dvi2pcl
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-24
|
5KB
|
215 lines
/* $Log: main.c,v $
* Revision 0.8 92/11/23 19:46:49 19:46:49 bt (Bo Thide')
* Fixed resolution bug. Portable downloading. Added/changed options. PJXL color support
*
* Revision 0.7 92/11/13 02:41:34 02:41:34 bt (Bo Thide')
* More bug fixes and improvements. Support for PaintJet XL
*
* Revision 0.6 92/11/10 21:47:50 21:47:50 bt (Bo Thide')
* Bug fixes. Added -R option. Better font handling.
*
* Revision 0.5 92/11/09 16:25:37 16:25:37 bt (Bo Thide')
* Rewrite of dospecial.c. Extended \special support
*
* Revision 0.4 92/11/08 02:45:53 02:45:53 bt (Bo Thide')
* Changed to portable bit manipulations. Replaced strrstr for non-POSIX compliant C. Fixed numerous bugs. Added support for more \special's.
*
* Revision 0.3 92/08/24 12:45:44 12:45:44 bt (Bo Thide')
* Fixed 8 bit (dc font) support.
*
* Revision 0.2 92/08/23 17:28:58 17:28:58 bt (Bo Thide')
* Source cleaned up. Changed certain function calls. Removed globals.
*
* Revision 0.1 92/08/22 23:58:48 23:58:48 bt (Bo Thide')
* First Release.
* */
#pragma COPYRIGHT "Bo Thide' and Helmut Kopka, 1992"
#include <stdio.h>
#include <string.h>
#include "globals.h"
#include "paths.h"
#include "pcl.h"
static char rcsid[] = "$Header: main.c,v 0.8 92/11/23 19:46:49 bt Exp $";
static char fatal_error[] = "This was a fatal error.\n";
static char copyright[] = "Copyright (c) Bo Thide' and Helmut Kopka, 1992.";
#ifdef TIMING
#include <sys/timeb.h>
#endif /* TIMING */
main(argc, argv, envp)
int argc;
char **argv;
char **envp;
{
char bitname[NAMELENGTH];
char curname[NAMELENGTH];
char dviname[NAMELENGTH];
char usgname[NAMELENGTH];
bool outreverse=TRUE;
short device=DEV_LJPLUS;
short maxdown=MAXDOWN;
short numcopies=1;
short pcllevel=PCLLEVEL;
short resolution=RESOLUTION;
short twosided=FALSE;
long startloc=0;
FILE *bitfile;
FILE *dvifile;
FILE *resfile;
FILE *usgfile;
#ifdef TIMING
struct timeb timebuffer;
double start_time, time;
ftime(&timebuffer);
start_time = (double)((timebuffer.time) + (timebuffer.millitm)/1000.0);
#endif /* TIMING */
/* Get things started properly */
initialize();
/* Process all dvi2pcl options and construct the filenames. */
getoptions(argc, argv, envp, bitname, dviname, usgname,
&pcllevel, &numcopies, &device, &maxdown, &outreverse,
&resolution, &twosided);
/*
* Open the output bitfile or, if bitname is an empty string, stdout.
*/
if(strcmp(bitname, "") == 0) {
bitfile = stdout;
}
else {
if((bitfile = fopen(bitname,"w")) == NULL) {
fprintf(stderr,"Cannot open the bit file %s for output.\n", bitname);
exit(-1);
}
}
/*
* Open the input dvifile or stdin.
*/
if(strcmp(dviname, DVIFILE_SUFFIX) == 0) {
dvifile = stdin;
}
else {
if((dvifile = fopen(dviname,"r")) == NULL) {
fprintf(stderr,"Cannot open the dvi file %s for input.\n", dviname);
exit(-1);
}
}
/*
* Open the input resident font info file
*/
strcpy(curname, respath);
if((resfile = fopen(curname,"r")) == NULL) {
fprintf(stderr,"Cannot open the resident font file %s for input.\n", curname);
exit(-1);
}
/* Prescan the input file. */
preamble(dvifile, resolution);
startloc = skippages(bitfile, dvifile, pcllevel, resolution);
if(!inpostamble){
/* If not in postamble, prescan the file up to maxpages */
while(maxpages-- > 0){
/* Prescan up to maxpages or postamble */
prescanpage(bitfile, dvifile, pcllevel, resolution);
if(inpostamble){
postamble(dvifile);
break; /* font_def agreement */
}
if(!betweenpages(dvifile, PRESCAN_ON))
break;
}
}
/* Initialize the printer */
fprintf(bitfile, PCL4_INIT_PRINTER);
fprintf(bitfile, PCL4_COPIES, numcopies);
fprintf(bitfile, PCL4_RESOLUTION, resolution);
fprintf(bitfile, PCL5_PRINT_DIRECTION, 0);
/* Download the defined fonts */
cachefonts(bitfile, resfile, maxdown, device);
/* Now do the main work */
if(twosided)
doodevpages(bitfile, dvifile, pcllevel, outreverse,
resolution, device);
else
doallpages(bitfile, dvifile, pcllevel, outreverse,
resolution, device);
fprintf(bitfile, PCL4_CLEAN_PRINTER);
#ifdef TIMING
ftime(&timebuffer);
time = ((timebuffer.time) + (timebuffer.millitm)/1000.0)
-start_time;
fprintf(stderr,"Time of complete run: %.3lf sec, %.3lf sec/page (%.2lf ppm)\n",
time, time/actualpagecount, (double)(actualpagecount*60)/time);
#endif /* TIMING */
if(verbose){
fprintf(stderr,"%s done.\n",argv[0]);
if((usgfile = fopen(usgname,"w")) == NULL) {
fprintf(stderr,"Cannot open the output file %s\n", usgname);
exit(-1);
}
diagnostics(usgfile);
}
exit(0);
}
/*
* Error and die routines.
* Print error messages and exits.
*/
prerror(s)
char *s;
{
fprintf(stderr,s);
fprintf(stderr,fatal_error);
fflush(stderr);
exit(-1);
}
void sterror(s, st)
char *s;
char *st;
{
fprintf(stderr,s, st);
fprintf(stderr,fatal_error);
fflush(stderr);
exit(-1);
}
valerror(s,v)
char *s;
int v;
{
fprintf(stderr,s,v);
fprintf(stderr,fatal_error);
fflush(stderr);
exit(-1);
}
valvalerror(s,u,v)
char *s;
int u,v;
{
fprintf(stderr,s,u,v);
fprintf(stderr,fatal_error);
fflush(stderr);
exit(-1);
}